﻿using System;
using ABB.Common.DataModel;

namespace ABB.Common.BusinessLogic.Reporting
{
    /// <summary>
    /// Schnittstelle für den DataLoader.
    /// </summary>
    public interface IReportDataLoader
    {
        /// <summary>
        /// Extrahiert den entsprechenden Wert für den Lot gemäss der übergebenen
        /// <see cref="ProjectPlanningDataSet.ReportColumnRow"/>.
        /// </summary>
        /// <param name="lot"></param>
        /// <param name="column"></param>
        /// <param name="user">Der User, benötigt für das filtern der ChangeLogs.</param>
        /// <param name="hasChanged">Output Parameter, gibt an ob der Wert sich für den Benutzer
        /// verändert hat.</param>
        /// <returns></returns>
        string GetValueForLotByReportColumn(ProjectPlanningDataSet.LotRow lot,
                                            ProjectPlanningDataSet.ReportColumnRow column,
                                            ProjectPlanningDataSet.UserRow user, out bool hasChanged);

        /// <summary>
        /// Extrahiert den entsprechenden Wert für den Lot gemäss der übergebenen
        /// <see cref="ProjectPlanningDataSet.ReportColumnRow"/>.
        /// </summary>
        /// <param name="lot"></param>
        /// <param name="column"></param>
        /// <returns></returns>
        string GetValueForLotByReportColumn(ProjectPlanningDataSet.LotRow lot,
                                            ProjectPlanningDataSet.ReportColumnRow column);

        /// <summary>
        /// Gibt die Label-Definition für eine Report-Column zurück.
        /// </summary>
        /// <param name="column"></param>
        /// <returns></returns>
        ProjectPlanningDataSet.LabelRow GetLabelForReportColumn(ProjectPlanningDataSet.ReportColumnRow column);

        /// <summary>
        /// Gibt das DataSet zurück, aus welchem die Daten geladen werden.
        /// </summary>
        ProjectPlanningDataSet DataSet { get; }
    }
}
